package org.huangrui.spark.java.sql;

import org.apache.spark.api.java.function.ForeachFunction;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import org.huangrui.spark.java.bean.User;

/**
 * @Author hr
 * @Create 2024-10-20 10:33
 */
public class SparkSQL02_Model_1 {
    public static void main(String[] args) {
        SparkSession sparkSession = SparkSession.builder().appName("SparkSQL02_Model").master("local[4]").getOrCreate();

        // TODO Spark SQL中对数据模型也进行了封装 ： RDD -> Dataset
        //      对接文件数据源时，会将文件中的一行数据封装为Row对象
        Dataset<Row> ds = sparkSession.read().json("data/user.json");

        // TODO DataFrame
        /*ds.foreach((ForeachFunction<Row>) row -> {
            System.out.println(row.getInt(2));
        });*/
        // TODO 将数据模型中的数据类型进行转换，将Row转换成其他对象进行处理
        Dataset<User> userDs = ds.as(Encoders.bean(User.class));
        userDs.foreach((ForeachFunction<User>) user -> {
            System.out.println(user.getAge());
        });

        sparkSession.stop();
    }
}
/*
@Data
class User implements Serializable {
    private long id;
    private long age;
    private String name;
}
*/
